<?php

class ArrayUtils
{
    /**
     * 获取数组中的值，如果键不存在则返回默认值
     */
    public static function getValue(array $array, $key, $default = null)
    {
        return $array[$key] ?? $default;
    }

    /**
     * 去除数组中的空值（null、空字符串）
     */
    public static function filterEmpty(array $array): array
    {
        return array_filter($array, function ($value) {
            return !is_null($value) && $value !== '';
        });
    }

    /**
     * 数组去重（保留键值）
     */
    public static function unique(array $array): array
    {
        return array_unique($array, SORT_REGULAR);
    }

    /**
     * 判断数组是否是关联数组（键是否包含非数字）
     */
    public static function isAssoc(array $array): bool
    {
        return array_keys($array) !== range(0, count($array) - 1);
    }

    /**
     * 按键名排序数组
     */
    public static function sortByKey(array $array, int $sortFlag = SORT_ASC): array
    {
        if ($sortFlag === SORT_ASC) {
            ksort($array);
        } else {
            krsort($array);
        }
        return $array;
    }

    /**
     * 按值排序数组
     */
    public static function sortByValue(array $array, int $sortFlag = SORT_ASC): array
    {
        if ($sortFlag === SORT_ASC) {
            asort($array);
        } else {
            arsort($array);
        }
        return $array;
    }
}

// 示例
$data = ["b" => 2, "a" => 1, "c" => null, "d" => ""];
var_dump(ArrayUtils::isEmpty($data)); // false
var_dump(ArrayUtils::getValue($data, 'a', 'default')); // 1
var_dump(ArrayUtils::filterEmpty($data)); // ["b" => 2, "a" => 1]
var_dump(ArrayUtils::isAssoc($data)); // true
var_dump(ArrayUtils::sortByKey($data)); // 按键名升序